// 测试 for/in 循环

let x = {
    id: 1001 ,
    name: '张三丰' ,
    gender: '靓仔' ,
    age: 108
}

let descriptor1 = {
    value: '175cm' ,
    enumerable: true /* enumerable 为 true 时表示属性是可以枚举的 */
}
Object.defineProperty( x , 'height' , descriptor1 );

let descriptor2 = {
    value: '80kg' ,
    enumerable: false /* enumerable 为 false 时表示属性不可枚举 */
}
Object.defineProperty( x , 'weight' , descriptor2 );

// 使用 for/in 循环可以 遍历 x 所引用实例中所有 可枚举的属性
for( let propertyName in x ){
    let propertyValue = x[ propertyName ] ;
    console.log( propertyName , propertyValue );
}

console.log( '- - - - - - - - - - - - - - -' );

console.log( x.height );
console.log( x[ 'height' ] );

console.log( '- - - - - - - - - - - - - - -' );

// 因为 for/in 性能太差，所以可以使用 Object.keys 函数获得某个实例中所有可枚举的属性名
let propertyNameArray = Object.keys( x );

for( let i = 0 ; i < propertyNameArray.length ; i++ ){
    let name = propertyNameArray[ i ];
    console.log( i , name , x[ name ] );
}